import os
import matplotlib.pyplot as plt
import numpy as np
# 定义读取persons文件函数
def read_persons(path):
    # 检查文件是否存在，如果不存在则打印消息
    if not os.path.exists(path):
        print("文件不存在")
    else:
        # 如果文件存在则打开，用读模式 并命别名为f
        with open(path,"r") as f:

            # f是读取的数据，for循环进行遍历
            for line in f:
                # line 是persons文件中的一行数据，需要进行分割
                print(" line : " , line)
                person = line.split(",")
                print(person)

class Movie:# 定义电影类
    def __init__(self,no,mingcheng,zongpiaofang,pingfen):
        self.no = no
        self.mingcheng = mingcheng
        self.zongpiaofang = zongpiaofang
        self.pingfen = pingfen


class MovieMs:#定义一下电影的管理类
    def __init__(self):
        pass
    movies = []#需要一个空的列表
    def menu(self):
        print("请输入数字1-读取文件并并且清洗数据及保存到列表中")
        print("请输入数字2-显示前后的10条电影信息")
        print("请输入数字3-统计电影数据")
        print("请输入数字4-新增电影并且保存到电影表中")
        print("请输入数字5-输入电影信息，显示电影的时间走势图")
        #给别人看一下菜单功能

        function_num = int(input("请输入数字来进行功能选择"))
    #输入数字来选择功能


    #下面就是相关功能对应的函数，使用函数就调用一下他们的名字即可
        if function_num == 1:
            print("欢迎使用功能一，读取文件并且保存到列表")
            self.do_read()
        elif function_num == 2:
            print("欢迎使用功能二，显示前后10条电影数据")
            self.do_pb10_display()
        elif function_num == 3:
            print("欢迎使用功能三，统计电影的相关数据")
            self.do_statistic()
        elif function_num == 4:
            print("欢迎使用功能四，新增电影并保存到文件")
            self.do_add_save()
        elif function_num == 5:
            print("欢迎使用功能五，查看电影票房的时间走势图")
            self.do_trend_chart()
        else:
            print("请输入正确的数字")


#接下来让我们的功能函数是如何去体现的，加入算法，数据结构
    def do_read(self):  # 采用文件数据（读）功能1
        path = "persons.txt"
        if not os.path.exists(path):
            print("文件不存在")
        else:
            with open(path, "r") as f:
                index = 0
                for line in f:
                    if index == 0:
                        index += 1
                        continue
                    else:
                        print(line)
                        movie_data = line.split(";")
                        one_movie = Movie(movie_data[0], movie_data[1], movie_data[2], movie_data[3])
                        self.movies.append(one_movie)
                        index += 1

    def do_pb10_display(self):  # 陈列电影数据元素    功能2
        for i in self.movies:#写入for循环去遍历
            print(i.no, i.mingcheng, i.zongpiaofang, i.pingfen)

    def do_statistic(self):# 功能3
        f = open("persons.txt", "r")
        m = [int(i.zongpiaofang) for i in self.movies]
        n = [float(i.pingfen) for i in self.movies]
        x = (sum(m))#电影的总票房
        y = len(m)#等同于电影个数
        z_piaofang = x / y
        print("电影的平均票房为:", z_piaofang)
        a = float(sum(n))
        b = len(n)
        a_pingfen = a / b
        print("电影的平均评分为:", a_pingfen)



    def do_add_save(self):  # 功能4
            no = input("请输入序号")
            mingcheng = input("请输入电影名称")
            piaofang = input("请输入电影票房")
            pingfen = input("请输入电影评分")
            movie = Movie(no, mingcheng, piaofang, pingfen)
            self.movies.append(movie)
            line = no + ";" + mingcheng + ";" + piaofang + ";" + pingfen + "\n"
            with open("persons.txt", "a") as f:
                f.write(line)

    def do_trend_chart(self):#调用函数来实现电影数据的时间走势图需要用到头文件matplotlib
        m = input("————请输入电影的名字————：")
        plt.figure()
        plt.rcParams['font.sans-serif']=['SimHei']
        plt.subplot(221)
        plt.xlabel("日期")
        plt.ylabel("票房")
        plt.title("电影票房记录")
        a=["周一","周二","周三","周四","周五","周六","周天"]
        b=[1200,1000,900,1200,1300,500,1500]
        plt.bar(x=a,height=b)
        x=a
        y=b
        plt.plot(x,y,'r-',lw=5)
        plt.show()

if __name__ == '__main__':
    read_persons("persons.txt")#采用相对路径
    a = MovieMs()
    while 1:
        a.menu()